ヘッダーをスキップ
Oracle TimesTen In-Memory Databaseオペレーション・ガイド
リリース6.0
B25767-03
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

クライアント/サーバーのチューニング

パフォーマンスへの影響: 大

ローカル処理(可能な場合)

TimesTen Clientを使用してリモート・サーバー・マシンにあるデータ・ストアにアクセスする場合、接続に対してネットワーク上のオーバーヘッドが発生することがあります。可能であれば、TimesTen Data Managerをローカルにアクセスするようにアプリケーションを作成し、アプリケーションをTimesTen Data Managerと直接リンクするようにしてください。

パフォーマンスへの影響: 不定

クライアントとサーバーが同一マシン上にある場合に、IPCとして共有メモリー・セグメントを使用

TimesTen Clientは、通常、TCP/IPソケットを使用してTimesTen Serverと通信します。TimesTen ClientとTimesTen Serverの両方が同一マシン上にある場合は、プロセス間の通信(IPC)に共有メモリー・セグメントまたはUNIXドメイン・ソケットを使用することで、クライアント・アプリケーションのパフォーマンスが改善されます。

共有メモリー・セグメントをIPCとして使用するには、ttendaemon.optionsファイルでサーバー・オプションを設定する必要があります。サーバー・オプションの詳細は、「TimesTen Webサーバーのオプションの変更」を参照してください。

また、IPCに共有メモリー・セグメントを使用するアプリケーションでは、ネットワーク・アドレスとしてttShmHostを使用して論理サーバー名(クライアントDSNに対する)を設定する必要があります。詳細は、「UNIXでのクライアントDSNの作成および構成」を参照してください。

この機能は共有メモリーを大量に必要とする可能性があります。TimesTen Serverは、既存の接続数や全接続内の文の数にかかわりなく、共有メモリー・セグメントを事前に割り当てます。

UNIXマシンでアプリケーションを実行しているときにメモリーの使用量が懸念される場合は、UNIXドメイン・ソケットを通信に使用すると、TimesTen Client ODBCドライバを使用しているアプリケーションのパフォーマンスを改善できる場合があります。UNIXドメイン・ソケットの使用によるパフォーマンスの改善は、ShmIPCを使用した場合ほど大きくありません。

ローカル接続にUNIXドメイン・ソケットを使用するアプリケーションでは、ネットワーク・アドレスとしてttLocalHostを使用して論理サーバー名(クライアントDSNに対する)を設定する必要があります。詳細は、「UNIXでのクライアントDSNの作成および構成」を参照してください。また、システム・カーネル・パラメータが、必要な接続数を許容するように設定されていることも確認してください。『Oracle TimesTen In-Memory Databaseインストレーション・ガイド』のインストールの前提条件に関する項を参照してください。

SELECT問合せでのTT_PREFETCH_CLOSEの有効化/無効化

パフォーマンスへの影響: 不定

TimesTen接続オプションのTT_PREFETCH_CLOSEを使用すると、TimesTen Clientドライバを使用するアプリケーションで、特定のSELECT問合せのパフォーマンスが改善されます。これはODBC文のオプションで、SQLSetStatementOptionによって設定できます。このオプションを使用するには、アプリケーションで明示的に「ON」または「OFF」を指定する必要があります。このオプションは、カーソルをクローズしたりコミットするためのネットワークI/Oを不要にするために設けられています。

TimesTen Serverは、SQLExecuteおよびSQLExecDirectの実行時に、データ・ストアの結果セットの全部または一部をプリフェッチしており、このデータは、TimesTen Clientでバッファリングされます。これにより、クライアントとサーバー間のネットワークI/Oが低減されます。また、AUTOCOMMITが無効であれば、結果セットの終わりに達するとサーバーはカーソルも閉じます。

読取り専用のトランザクションでTT_PREFETCH_CLOSEが有効な場合、AUTOCOMMITが無効であれば、サーバーではトランザクションがコミットされます。AUTOCOMMITが有効であれば、カーソルが閉じられ、サーバーではトランザクションがコミットされます。

注意: TT_PREFETCH_CLOSEオプションはクライアント・アプリケーションにかぎり有効です。TimesTen Data Managerアプリケーションで使用した場合、このオプションは無視されます。

通常、次の条件がすべて満たされている場合には、アプリケーションでTT_PREFETCH_CLOSEオプションを有効にしてください。

注意: このオプションは慎重に使用する必要があります。このオプションが有効になっているときに、トランザクションにINSERT文、UPDATE文またはDELETE文が含まれていると、アプリケーションでコミットを発行しなくても、サーバーがこれらの変更をコミットする可能性があります。

次の例は、JDBCとODBCでTT_PREFETCH_CLOSEオプションを使用する方法を示しています。

例8.1

JDBCでTT_PREFETCH_CLOSEオプションを使用するには、次のようにします。

SQLSetConnectOption (hdbc, TT_PREFETCH_CLOSE,
     TT_PREFETCH_CLOSE_ON); 
SQLExecDirect (hstmt, "SELECT * FROM T", SQL_NTS); 
while (SQLFetch (hstmt) != SQL_NO_DATA_FOUND) 
{ 
// do the processing 
} 
SQLFreeStmt (hstmt, SQL_CLOSE); 
SQLTransact (henv, hdbc, SQL_COMMIT); 
SQLSetConnectOption (hdbc, TT_PREFETCH_CLOSE,
     TT_PREFETCH_CLOSE_OFF); 
例8.2

ODBCでTT_PREFETCH_CLOSEオプションを使用するには、次のようにします。

con = DriverManager.getConnection ("jdbc:timesten:client:" + DSN); 
stmt = con.createStatement(); 
import com.timesten.sql 
........... 
........... 
con.setTtPrefetchClose(boolean); 
rs = stmt.executeQuery("select * from t"); 
while(rs.next()) 
{ 
 // do the processing 
} 
import com.timesten.sql 
.... 
try { 
 ((TimesTenConnection)con).setTtPrefetchClose(true); 
} 
catch (SQLException) { 
... 
} 
rs.close(); 
con.commit(); 
con.setTtPreFetchClose (false); 
パフォーマンスへの影響: 大

SQLTransactのコール時における接続ハンドルの使用

アプリケーションは、SQL_NULL_HDBCおよび有効な環境ハンドルを使用してSQLTransactをコールできます。

SQLTransact (ValidHENV, SQL_NULL_HDBC, fType) 
 

または、有効な接続ハンドルを使用してコールすることもできます。

SQLTransact (SQL_NULL_HENV, ValidHDBC, fType).

有効な環境ハンドルを使用する場合、TimesTenドライバでは、接続されているすべての接続ハンドルでトランザクションのコミット/ロールバックが試行されます。クライアント/サーバー・モードでは、これによってn個以上のネットワークI/O操作が発生します。ここで、nとは接続されている接続ハンドルの数です。通常、ネットワークI/O操作は、TimesTenデータベース操作より高コストになります。

したがって、アプリケーションでは、単一接続でコミット/ロールバックするのみの場合、SQLTransactのコール時に有効な接続ハンドルを使用する必要があります。